package com.lance.answer.gui.answer.gk.video.tmp.tmp;

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.lance.answer.dto.CompleteInfo;
import com.lance.answer.gui.answer.Util;
import com.lance.answer.gui.answer.gk.answer.AnswerDTO;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.TimeUnit;

@Slf4j
public class UploadFileTasktmpppppppppppp extends Thread {


    private final String driverPath;
    private final LinkedBlockingDeque<AnswerDTO> answerDTOS;

    public UploadFileTasktmpppppppppppp(String driverPath, LinkedBlockingDeque<AnswerDTO> answerDTOS) {
        this.driverPath = driverPath;
        this.answerDTOS = answerDTOS;
    }

    @SneakyThrows
    @Override
    public void run() {

        while (answerDTOS.size() > 0) {
            AnswerDTO answerDTO = answerDTOS.take();
            String userName = answerDTO.getUsername();
            String password = answerDTO.getPwd();
            log.info("任务：{} 剩余 {} 行 用户名：{} 密码：{}",
                    Thread.currentThread().getName(), answerDTOS.size(), userName, password);
            run(answerDTO.getUploadUrl(),answerDTO.getSubjectName(),driverPath,userName,password);
            //todo
        }

        if (answerDTOS.size() == 0) {
            log.info("课程所有用户均已执行完毕，系统将在20min后结束");
            TimeUnit.MINUTES.sleep(20);
            return;
        }
    }







    // 管理学基础 2065001457555 19940419
    public static void run(List<String> urlTasks, String subjectName, String driverPath, String userName, String password) throws Exception {

        String filePath = "libsTmp//answerInfo//" + subjectName;
        //  String filePath = "D:\\project\\answer-tool\\libs\\answerInfo\\" + subjectName;

        if (!new File(filePath).exists()) {
            new File(filePath).mkdirs();
        }

        filePath = filePath + "//" + userName + "-upload.txt";

        File completeInfoFile = new File(filePath);
        if (!completeInfoFile.exists()) {
            completeInfoFile.createNewFile();
        }
        InputStream inputStream = new FileInputStream(completeInfoFile);
        String completeInfoStr = IOUtils.toString(inputStream, "UTF-8");
        List<CompleteInfo> completeInfoList = JSONObject.parseArray(completeInfoStr, CompleteInfo.class);
        if (null == completeInfoList) {
            completeInfoList = Lists.newArrayList();
        }




        // 定义是否开启浏览器没有这门课程
        boolean isStartChrome = true;

        List<String> haveCompleteHomeWorkUrlSet = Lists.newArrayList();

        for (CompleteInfo info : completeInfoList) {
            if (info.isComplete()) {
                haveCompleteHomeWorkUrlSet.add(info.getHomeworkUrl());
            }
        }
        if(haveCompleteHomeWorkUrlSet.size()>0&&urlTasks.contains(haveCompleteHomeWorkUrlSet.get(0))){
            isStartChrome = false;
        }

        if (!isStartChrome) {
            return;
        }





        WebDriver driver = Util.getDriver(driverPath);
        //String url = "http://student.ouchn.cn/";
        String url = "http://passport.ouchn.cn/Account/Login?ReturnUrl=%2Fconnect%2Fauthorize%2Fcallback%3Fclient_id%3Dstudentspace%26redirect_uri%3Dhttp%253A%252F%252Fstudent.ouchn.cn%252F%2523%252Fsignin-oidc%2523%26response_type%3Did_token%2520token%26scope%3Dopenid%2520profile%2520ouchnuser%2520ouchnstudentspaceapi%2520offline_access%26state%3Dca1cb5d0270b49fdaea508b8a846c457%26nonce%3Dd257df51b0a141ac8ed35b1caf59ef4c";
        driver.get(url);
        Thread.sleep(3000);
        //Util.login(driver, "2065001457555", "19940419");
        Util.login(driver, userName, password);
        Util.switchToFirst(driver);
        Thread.sleep(3000);

        boolean isFindSubject = false;

        for (WebElement we : driver.findElements(By.className("media-body"))) {
            Util.switchToFirst(driver);
            // 找到管理学基础
            String mediaTitle = we.findElement(By.className("media-title")).getText();

            if (!mediaTitle.equals(subjectName)) {
                continue;
            }
            isFindSubject = true;
            //点击进入学习的按钮
            WebElement studyButton = we.findElement(By.cssSelector("button[class='btn bg-primary']"));
            studyButton.click();
            //Util.switchToLast(driver);
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        if (!isFindSubject) {
            try {
                driver.close();
                driver.quit();
            } catch (Exception e) {

            }
            return;
        }

        System.out.println(urlTasks.toString());
        int i = 1;
        for (String urlTask : urlTasks) {

            try {
                Util.switchToLast(driver);
                // FIXME 当完成第一份形考任务时，必须提交，否则会弹出 ”是否保存当前页面“消息
                driver.get(urlTask);
                Thread.sleep(2 * 1000);
                // 点击继续作业
                boolean isGoOn = true;
                for(WebElement we:driver.findElements(By.tagName("td"))){
                    if(we.getText().equals("已提交请评分")){
                        CompleteInfo completeInfo = new CompleteInfo();
                        completeInfo.setComplete(true);
                        completeInfo.setHomeworkUrl(urlTask);
                        completeInfoList.add(completeInfo);
                        Thread.sleep(2000);
                        isGoOn = false;
                    }
                    if(we.getText().equals("草稿（未提交）")){

                        try{
                            for(WebElement we1:driver.findElements(By.cssSelector("*[class='btn btn-secondary']"))){
                                System.err.println("???"+we.getText());
                                if(we1.getText().trim().equals("提交作业")){
                                    we.click();
                                    Thread.sleep(2000);
                                    driver.findElement(By.id("id_submissionstatement")).click();
                                    Thread.sleep(1000);
                                    driver.findElement(By.id("id_submitbutton")).click();
                                    Thread.sleep(5000);
                                    break;
                                }
                            }

                        }catch (Exception e){

                        }
                        isGoOn = false;
                    }
                }
                if(!isGoOn){
                    i++;
                    continue;
                }

                // form-check


                Map<String,String> answers = Maps.newHashMap();
                answers.put("计算机应用基础","计算机的发展越来越重要，基础的学习不能没有，学习好计算机基础更是为将来做准备。随着信息技术的高速发展并迅速渗透到，社会生活的各个方面，计算机日益成为人们学习、工作、生活不可缺少的基本工具，我相信再过不了几年，计算机将会日益壮大。进入大学，计算机无时无刻不伴随我们，给我们的学习生活带来便利与乐趣。这个学期是展现自我能力的一个好时机，在这个学期我们将会进行专业课考试，这就考验平时有没有认真听讲，在操作课时有没有认真完成老师布置的任务，还有平时自己积累的知识和经验，这些都将成为面临考试的一项重要的准备工作。计算机课是一门知识性和技能性相结合、理论性和操作性都很强的项目，与平时学的文化课不同。我们应该带着兴趣与积极向上的精神来学习这门课程，在计算机这方面学习更多的东西，为以后将要走上工作岗位的我们打下良好的基础老师对每个人都是很好并且很认真的，她会耐心的教导我们，教导我们正确使用计算机。老师说：‘’我们学习计算机不是为了以后去当一名程序员，而是让自己成为这个行业的精英。计算机的范围很广，要学习的东西有很多，所以我们要了解相关知识，多思考，多提问，学会学以致用，计算机网络使学习、生活、工作的资源消耗大为降低。我们这一代人用的都是高科技，以后将会有越来越多的高科技等待着我们去开发与研究！我相信在以后的学习生活中，我们都会日益上升，懂的东西越来越多，专业性越开越强，接受新颖的教育，充实专业的技能，不断学习，做到最好！");
                answers.put("思想道德与法治","（一）我国国家制度的核心和基本原则。（二）人民掌握和行使国家权力的组织形式与制度。宪法规定：“人民行使国家权力的机关是全国人民代表大会和地方各级人民代表大会。”（三）国家权力机关的地位。（四）国家权力机关行使职权的原则。（五）明确划分中央和地方国家机构的职责和相互关系。（六）民族区域自治制度。（七）特别行政区制度。");
                answers.put("中国近现代史纲要","辛亥革命成功得仓促,到手的乃是不彻底的胜利,所以不可避免具有很强的局限性。首先,孙中山的三民主义只完成了第一项一一民族主 义,其他民权、民生长期挂着欠账。而且就民族主义一项来说，完咸的也仅仅是“驱除鞑虏”， 各个帝国主义势力原封不动地保存。袁世凯上台后,中国在北洋军阀的反动统治下，三民主义成了纸面上的东西，他们挂羊头卖狗肉，虽有民国之名而无民国之实。就这一点来看，辛亥革命的成功虽然具有重大的历史意义，但却是煮了一锅夹生饭。辛亥革命果实最终被袁世凯窃取,中国反帝反封建任务并没有完成，所以它又是失败了。其次,领导这次革命资产阶级政党一同 盟会缺乏明确反帝纲领和具体行动,由于资产阶级历史的局限性，以孙中山为首的资产阶级革命派，对帝国主义的本质的认识不清楚。从同盟会到南京临时政府,他们对帝国主义抱有幻想，他们认为建立资产阶级国家，西方是会赞成的，孙中山不仅没有辨明对帝国主义的所谓“中立”的伪装,反而在《告各友邦书》中以承认帝国主义在中国的一切权益为代价,和帝国主义维持友好关系。资产阶级的如此妥协,革命实难继续下去。辛亥革命的领导者未能发动广大人民群众,特别是农民群众参加斗争。在同盟会的纲领中，虽然提出“平均 地权”口号 ，但实际上并没有被全体革命党人所接受,也没能找到解决土地问题的措施，因而也未能实行“平均地权”,从而失去动员农民群众的作用,既然革命党失掉农民的支持,就把注意力转到新军和会党。");
                answers.put("马克思主义基本原理概论","习近平总书记的重要讲话，高屋建瓴、视野宏大、思想深刻、内容丰富，向全党全国全世界宣示了我们党毫不动摇坚持马克思主义的指导地位、坚持对马克思主义科学真理的坚定信念、坚持高举中国特色社会主义伟大旗帜的战略定力，是一篇光辉的马克思主义纲领性文献，鼓舞人心、振奋人心、凝聚人心，具有极其重要的政治意义、理论意义、时代意义、实践意义。全区各级党组织和广大党员干部要提高政治站位、强化政治责任，把学习贯彻习近平总书记在纪念马克思诞辰200周年大会上的重要讲话精神作为学习贯彻习近平新时代中国特色社会主义思想的重要内容，深刻领会精神实质，准确把握实践要求，自觉把思想和行动统一到总书记重要讲话精神上来，更加紧密地团结在以习近平同志为核心的党中央周围，以更加坚定的决心、更加昂扬的斗志、更加有为的举措，推动宁夏改革发展各项事业不断取得新的进展。");
                answers.put("毛泽东思想和中国特色社会主义理论体系概论","为了认真总结大革命失败以来的经验教训，确定革命斗争的路线和任务，1928年6月18日至7月11日，中国共产党在苏联莫斯科召开第六次全国代表大会。出席大会的代表142人，其中有表决权的84人。大会在共产国际的帮助下，在一系列有关中国革命的根本问题上作出了基本正确的回答。大会指出:中国仍然是一个半殖民地半封建的国家，现阶段的中国革命是资产阶级性质的民主主义革命。革命的形势是第一个革命浪潮已经因为历次失败而过去了，而新的浪潮还没有来到，党的总路线是争取群众。目前最主要的危险倾向，是盲动主义和命令主义。尽管六大存在着对于中间阶级的两面性和反动势力的内部矛盾缺乏正确的估计和政策，对于大革命失败后党所需要的策略上的有秩序的退却，以及农村根据地的重要性和民主革命的长期性缺乏必要的认识等缺点，但大会决议传达贯彻后，大体上统一了全党的思想，对革命运动的发展产生了积极的作用。");
                answers.put("思想道德修养与法律基础","2021年9月17日，神舟十二号载人飞船返回舱在我国东风着陆场精准着陆，航天员聂海胜、刘伯明、汤洪波在顺利完成三个月的空间站巡天之旅后凯旋，标志着我国空间站关键技术验证和建造阶段的第一次载人航天飞行圆满成功。这是中国航天的新高度，也是中华民族的新高度，彰显了我国新型举国体制的巨大优势，展现了中国特色社会主义制度的优越性，再一次向世人生动诠释了载人航天精神的时代伟力。人无精神则不立，国无精神则不强。从“两弹一星”到载人航天，从北斗导航到月球探测，一代代中国航天人不负党和人民的期待和嘱托，奋力拼搏、锐意进取，用智慧和汗水创造了一个又一个举世瞩目的辉煌成就，孕育了航天传统精神、“两弹一星”精神、载人航天精神，以及新时代北斗精神和探月精神。“特别能吃苦、特别能战斗、特别能攻关、特别能奉献”的载人航天精神，既是航天传统精神和“两弹一星”精神的血脉赓续，也是新时代北斗精神和探月精神的精神源泉，具有强烈的爱国主义情怀和鲜明的时代特征，生动体现了以爱国主义为核心的民族精神和以改革创新为核心的时代精神");
                answers.put("习近平新时代中国特色社会主义思想","一是坚持以人民为中心的发展思想。二是不再简单以国内生产总值增长率论英雄。三是我国经济处于“三期叠加”时期。四是经济发展进入新常态。五是使市场在资源配置中起决定性作用、更好发挥政府作用。六是绿水青山就是金山银山。七是坚持新发展理念。八是推进供给侧结构性改革。九是发展不平衡不充分。十是推动高质量发展。十一是建设现代化经济体系。十二是构建以国内大循环为主体、国内国际双循环相互促进的新发展格局。十三是统筹发展和安全。");


                //  ------------FIXME 思想道德
                try {
                    if(answers.containsKey(subjectName)){

                        driver.findElement(By.cssSelector("*[class='btn btn-secondary']")).click();
                        Thread.sleep(2000);

                        WebElement element = driver.findElement(By.tagName("iframe"));
                        System.out.println(element.toString());
                        driver.switchTo().frame(element);
                        WebElement webElement = driver.findElement(By.tagName("body"));
                        String answer = answers.get(subjectName);
                        //answer = new String(answer.getBytes(),"utf-8");
                        if (null != webElement) {
                            webElement.clear();
                            webElement.sendKeys(answer);
                        }
                        //切换回主页面
                        driver.switchTo().defaultContent();
                    }
                    Thread.sleep(2000);
                    driver.findElement(By.id("id_submitbutton")).click();

                    if(subjectName.equals("马克思主义基本原理概论")){
                        for(WebElement submitBtn:driver.findElements(By.cssSelector("*[class='btn btn-secondary']"))){
                            if(submitBtn.getText().equals("提交作业")){
                                submitBtn.click();
                                break;
                            }
                        }
                        Thread.sleep(2000);
                        driver.findElement(By.id("id_submitbutton")).click();
                    }
                    try {
                        TimeUnit.SECONDS.sleep(2);
                        // 将新的完成作业的信息更新进去
                        FileUtils.write(completeInfoFile, JSONObject.toJSONString(completeInfoList, SerializerFeature.PrettyFormat), "utf-8");
                        driver.close();
                        driver.quit();
                    }catch (Exception e111){
                        e111.printStackTrace();
                    }
                    return;
                }catch (Exception e){
                    e.printStackTrace();
                 //   Thread.sleep(1000000);
                }finally {

                }
                //  ------------FIXME 思想道德




                for(WebElement we:driver.findElements(By.cssSelector("*[class='btn btn-secondary']"))){
                    System.err.println("???"+we.getText());
                    if(we.getText().trim().equals("添加作业")){
                        we.click();
                        Thread.sleep(2000);
                        driver.findElement(By.id("id_submitbutton")).click();
                        break;
                    }
                }

                Thread.sleep(5000);
                driver.findElement(By.cssSelector("i[class='icon fa fa-list fa-fw ']")).click();
                driver.findElement(By.cssSelector("div[class='dndupload-arrow']")).click();

                // 选中 选中文件
                for (WebElement we : driver.findElements(By.className("fp-repo-name"))) {
                    if (we.getText().trim().equals("上传一个文件")) {
                        we.click();
                    }
                }


                Thread.sleep(2000);
                WebElement upload = driver.findElement(By.cssSelector("input[name='repo_upload_file']"));
                System.err.println("name:" + upload.getAttribute("name"));
                //    upload.sendKeys("F:\\任务1.docx");
            //    upload.sendKeys( "F:\\"+subjectName+"\\"+"任务"+i+".docx");
                upload.sendKeys( "F:\\"+"任务"+i+".docx");
                i++;
                // ---工商企业管理(专科) --西方经济学  形考任务3：读书笔记-----

                Thread.sleep(2000);
                // 点击上传
                driver.findElement(By.cssSelector("button[class='fp-upload-btn btn-primary btn']")).click();
                Thread.sleep(2000);
                // 保存更改
                driver.findElement(By.cssSelector("input[type='submit']")).click();
                Thread.sleep(5 * 1000);

                for(WebElement we:driver.findElements(By.cssSelector("*[class='btn btn-secondary']"))){
                    System.err.println("???"+we.getText());
                    if(we.getText().trim().equals("提交作业")){
                        we.click();
                        Thread.sleep(2000);

                        try {
                            driver.findElement(By.id("id_submissionstatement")).click();
                            Thread.sleep(3000);
                        }catch (Exception e){

                        }

                        driver.findElement(By.id("id_submitbutton")).click();
                        Thread.sleep(5000);
                    }
                }


            } catch (Exception e) {
                System.err.println("taskUrl:" + urlTask + "  occur error");
                Thread.sleep(1000);
                e.printStackTrace();
            } finally {

            }
            //回到试题首页
            TimeUnit.SECONDS.sleep(2);
        }

        try {
            TimeUnit.SECONDS.sleep(2);
            // 将新的完成作业的信息更新进去
            FileUtils.write(completeInfoFile, JSONObject.toJSONString(completeInfoList, SerializerFeature.PrettyFormat), "utf-8");
            driver.close();
            driver.quit();
        }catch (Exception e111){
            e111.printStackTrace();
        }


    }


}
